Sélectionnez un profil pour adapter la présentation.

PLUSHIE

Un langage qui apprend et se transforme
Programmation en Langage Universel Séquentiel Heuristique pour une Intelligence Évolutive
Rappels sur les conventions de notation
    • Convention de typographie des mots
      • La typographie suivante est recommandée : les expressions à découper commencent, si possible, par une majuscule et se terminent par un caractère espace. Cela ne fait pas de l'espace un séparateur au sens usuel. L'interpréteur de base de PLUSHIE n'a aucune notion de séparateur.

    • Convention de nommage des pointeurs
      • Les étages successifs de pointeurs son notés par des symboles "<" placés à la fin du mot (mais avant l'espace de séparation).
        Exemple Ainsi "A<<< " désigne un pointeur de niveau 3 vers A, qui pointe donc en intermédiaire vers "A<< ", puis vers "A< " et enfin vers "A ".
Mais... comment ça peut marcher? Il n'y a pas de test, pas de GOTO, pas d'appel de fonction, de récursivité de...?

Au départ, non. Il n'y a que ce qui a été décrit : un moteur automate qui répète inlassablement les mêmes actions, une mémoire, 5 variables externalisées (ou registres), une instruction unique de copie en double indirection. Mais on peut tout reconstruire à partir de cela.

Saut non conditionnel

Soit donc le GOTO du basic. Le branchement est simplement obtenu en pointant le pointeur d'exécution à une autre adresse :

                Exécuter Destinationdusaut
                

Attention Il faut s'assurer qu'à un moment donné, la chaîne d'exécution revienne à un interpréteur capable de lire les caractères d'entrée et de les analyser. Sinon PLUSHIE part dans les limbes (et la touche chauffe).

Afficher à l'écran

Pour afficher un caractère ou une adresse à l'écran (le contenu d'une variable), il suffit de copier sur la variable de sortie

                Dire Variable
                
ou
                Voir Variable
                
selon le nom qu'on a choisi pour externaliser le registre de sortie. Par construction, le driver de sortie affichera un caractère à la place de l'adresse si la valeur est inférieure à 256 (mais on peut modifier le driver de sortie pour afficher tous les caractères UTF-8), ce qui est fait dans l'interface en ligne.

Valeur d'une variable...

...ou comment se prendre la tête !

Problème : avec la double indirection qui saute un étage de pointeur, comment récupérer la première adresse vers laquelle pointe une adresse ?

Les cases mémoire étant repérées par d'autres adresses mémoires avec un étage d'indirection supplémentaire, il faut effectivement penser à conserver l'adresse d'un atome nommé avant de lui affecter une valeur. Sinon il ne sera pas simplement adressable. On pourrait le retrouver dans le dictionnaire des mots connus, mais c'est' compliqué.
Il faut donc créer un pointeur vers l'atome et un pointeur vers ce pointeur (oui, double indirection oblige). C'est pourquoi vous verrez souvent, au moins avant que la fonction Déclarer ne soit définie, des créations de variables de la forme :

                Créer Variable< 

                Variable<< Variable< Variable< Variable 

                
(les signes < désignent les étages de pointeurs, voir conventions)

L'instruction
                   Tête< Variable 
               
permet de récupérer à l'adresse de Tête la valeur pointée par Variable. Cela revient à déterminer la "valeur" de la Variable.

Saut conditionnel

Ah ! Là on tient un argument pour démontrer que PLUSHIE ne peut pas marcher ! Sans test, pas d'algorithme complexe !

Et pourtant... On peut effectuer un saut conditionnel en utilisant uniquement la copie d'adresses mémoire :

En PLUSHIE, le test prendra la forme suivante :
Si Valeur1 Égale Valeur2 Alors Procédurea Sinon Procédureb Exécuter Test 
Il suffit de copier Procédureb sur l'adresse pointée par Si, puis copier Procédurea sur celle pointée par Égale, puis d'exécuter la valeur pointée par Si.

Ainsi si Valeur2 est égale à Valeur1, la seconde copie écrase la première et on exécute Procédurea et sinon on exécute Procédureb.

Tout informaticien détectera la faille majeure. Ce test est destructifv: les valeurs initiales pointées par Si et Alors sont écrasées. Il convient donc au préalable de les sauvegarder, puis de les restaurer en fin de test.(Tête< désigne toujours un pointeur vers Tête).
Le code suivant
            Tête< Si Sauvegardesi Tête
            Tête Sinon
            Tête< Égale Sauvegardeégale Tête
            Tête Alors
            Tête< Si Identique Tête
            Tête< Si Tête Sauvegardesi
            Tête< Égale Tête Sauvegardeégale
            Exécuter Identique
             

permet de contourner le problème. Bien entendu, il n'est pas question de réécrire tout ce code à chaque test. Le fichier ini.txt propose ainsi une fonction testidentique dont la syntaxe est :
Si Valeur1 Égale Valeur2 Alors Procédurea Sinon ProcédurebExécuter Testidentique

Suite

Pour obtenir la seconde adresse pointée par une variable :
            Suitede Variable Tete< Suite 
            
Tete contient alors la seconde valeur pointée par Variable (sa suite). Le registre pointé par Suite contient toujours (grâce au fonctionnement du moteur automate de niveau -1) l'adresse de la seconde adresse mémoire pointée par la valeur entrée dans Suitede (en pratique c'est juste adresse+1).

Les nombres

Au contraire de la plupart des langages informatiques, PLUSHIE n'a, au départ, pas accès à la valeur numérique des adresses mémoires qu'il manipule. C'est assez difficile à comprendre sans se plonger dans les détails techniques pointus. Mais PLUSHIE accède à une notion émergente de nombres naturels : la longueur des listes chaînées, ou des piles, ou des cascades. Un nombre est le nombre de fois où un test de fin de liste ne donne pas un résultat positif.

Les boucles

Dès que PLUSHIE a la notion de nombre, il peut apprendre à faire des boucles (du genre for i = 1 to 10, do procédure dans d'autres langages).
            Tantque Nombre Répéter Procédure Retourboucle Findeboucle Retourprocédure Boucle Exécuter Boucle 
            
Et puis, en utilisant les fonctions qu'il connaît, il peut bâtir des fonctions plus avancées.
Dites à PLUSHIE quelle fonction classique vous voudriez qu'il vous présente ! Plushie.langage (à) free.fr
🏗
En construction, plus à venir